#pragma once

#include "market_data.h"
#include "market_data_types.h"
#include "strategy.h"
#include <string>
#include <memory>
#include <unordered_map>
#include <queue>
#include <mutex>
#include <atomic>
#include <chrono>
#include <functional>

namespace hft {

// 使用market_data_types.h中统一的数据结构定义

/**
 * @brief 订单执行接口类
 * 
 * 负责订单的发送、撤单和状态管理
 */
class OrderExecutor {
public:
    OrderExecutor() = default;
    virtual ~OrderExecutor() = default;

    /**
     * @brief 初始化执行引擎
     * @param config 配置参数
     * @return 是否初始化成功
     */
    virtual bool init(const std::string& config) = 0;

    /**
     * @brief 启动执行引擎
     * @return 是否启动成功
     */
    virtual bool start() = 0;

    /**
     * @brief 停止执行引擎
     */
    virtual void stop() = 0;

    /**
     * @brief 发送订单
     * @param order 订单信息
     * @return 订单ID
     */
    virtual std::string sendOrder(const hft::Order& order) = 0;

    /**
     * @brief 取消订单
     * @param order_id 订单ID
     * @return 是否取消成功
     */
    virtual bool cancelOrder(const std::string& order_id) = 0;

    /**
     * @brief 获取订单状态
     * @param order_id 订单ID
     * @return 订单状态
     */
    virtual hft::OrderStatus getOrderStatus(const std::string& order_id) = 0;

    /**
     * @brief 注册订单回调
     * @param callback 回调函数
     */
    virtual void registerOrderCallback(
        std::function<void(const hft::Order&)> callback) = 0;

    /**
     * @brief 注册成交回调
     * @param callback 回调函数
     */
    virtual void registerTradeCallback(
        std::function<void(const hft::Trade&)> callback) = 0;

    /**
     * @brief 注册持仓回调
     * @param callback 回调函数
     */
    virtual void registerPositionCallback(
        std::function<void(const hft::Position&)> callback) = 0;

    /**
     * @brief 注册账户回调
     * @param callback 回调函数
     */
    virtual void registerAccountCallback(
        std::function<void(const hft::Account&)> callback) = 0;
};

// 订单管理?
class OrderManager {
public:
    virtual ~OrderManager() = default;
    virtual void onOrderUpdate(const hft::Order& order) = 0;  // 处理订单更新
};

// 智能订单路由
class SmartOrderRouter {
public:
    virtual ~SmartOrderRouter() = default;
    virtual void onOrderBookUpdate(const hft::OrderBook& book) = 0;  // 处理订单簿更�?
    virtual void onMarketData(const hft::MarketDataMessage& msg) = 0;  // 处理市场数据
    virtual void onOrderUpdate(const hft::Order& order) = 0;  // 处理订单更新
};

} // namespace hft